等参单元与坐标变换(Julia实现) |
您所在的位置:网站首页 › 坐标变换 雅可比 › 等参单元与坐标变换(Julia实现) |
等参单元与坐标变化
等参单元的概念坐标变换几何方程及雅可比矩阵雅可比矩阵实现(JuliaFEM)
矩形单元比三角形单元有更高的精度,但它不适应不规则形状。而任意直线四边形单元可以适应不规则形状。但问题是,如果有一边的边界方程为
y
=
b
x
+
c
y=bx+c
y=bx+c,代入位移插值函数
u
=
α
1
+
α
2
x
+
α
3
y
+
α
4
x
y
=
α
1
+
α
2
x
+
α
3
(
b
x
+
c
)
+
α
4
x
(
b
x
+
c
)
=
β
1
+
β
2
x
+
β
3
x
2
u=α_{1}+α_{2}x+α_{3}y+α_{4}xy=α_{1}+α_{2}x+α_{3}(bx+c)+α_{4}x(bx+c)=β_{1}+β_{2}x+β_{3}x^{2}
u=α1+α2x+α3y+α4xy=α1+α2x+α3(bx+c)+α4x(bx+c)=β1+β2x+β3x2,显然,在边界上位移不再是线性分布,因而不能由节点位移惟一确定,即:即使相邻两单元节点位移相同,也不能保证边界位移连续。这就限制了四边形单元的应用范围。因此,为了实际应用,寻找适当方式,将规则单元转化为曲线单元,是非常必要的。普遍采用的方法是
等参变换,即单元
几何形状和单元内的
位移函数采用相同的数目的结点参数和插值函数进行变换。采用等参变换后,关键问题是将整体坐标系里的单元刚度、荷载等单元特性变换为局部坐标系中计算。
等参单元的概念
如图所示的两套坐标系,一套是 Oxy ,用于实际单元,称为子单元;一套是Oξη ,它是标准后化的正方形单元,称为母单元。从母单元项子单元变换,实际上就是建立两个坐标系之间的变换关系,即:
A
′
(
x
,
y
)
=
f
(
A
(
ξ
,
η
)
)
A^{'}(x,y)=f(A(ξ,η))
A′(x,y)=f(A(ξ,η)) 将整体坐标用插值形式表示,即: x = ∑ i = 1 N i ( ξ , η ) x i , y = ∑ i = 1 N i ( ξ , η ) y i x=\sum_{i=1}N_{i}(ξ,η)x_{i},y=\sum_{i=1}N_{i}(ξ,η)y_{i} x=i=1∑Ni(ξ,η)xi,y=i=1∑Ni(ξ,η)yi ( x i , y i ) (x_{i},y_{i}) (xi,yi)为整体坐标系下各顶点的坐标;其中,Ni称为插值函数(形函数)。通过这一变换,对母单元上每一点(ξ,η)可以在实际单元中找到一对应点(x,y),这样就在两个单元间建立了一一对应关系。 在实际单元中建立位移函数的插值形式: (1) u = ∑ i = 1 N i ( ξ , η ) u i , v = ∑ i = 1 N i ( ξ , η ) v i u=\sum_{i=1}N_{i}(ξ,η)u_{i},v=\sum_{i=1}N_{i}(ξ,η)v_{i}\tag{1} u=i=1∑Ni(ξ,η)ui,v=i=1∑Ni(ξ,η)vi(1) 因为坐标变换和位移变换都用同样个数的相应的节点值做参数,并且具有完全相同的形函数作为变换系数,所以称这种单元为等参数单元。 坐标变换(2) x = ∑ i = n N i ( ξ , η ) x i ( n = i , j , k , m . . . ) , y = ∑ i = n N i ( ξ , η ) y i ( n = i , j , k , m . . . ) x=\sum_{i=n}N_{i}(ξ,η)x_{i}(n=i,j,k,m...), y=\sum_{i=n}N_{i}(ξ,η)y_{i}(n=i,j,k,m...) \tag{2} x=i=n∑Ni(ξ,η)xi(n=i,j,k,m...),y=i=n∑Ni(ξ,η)yi(n=i,j,k,m...)(2) 几何方程及雅可比矩阵(3) { ε } = { ε x ε y γ x y } = { ∂ u ∂ x ∂ v ∂ y ∂ v ∂ x + ∂ u ∂ y } \left\{\begin{matrix} ε \end{matrix} \right\}= \left\{\begin{matrix} ε_{x}\\ ε_{y}\\ γ_{xy}\\ \end{matrix} \right\}= \left\{\begin{matrix} \frac{\partial u}{\partial x}\\ \frac{\partial v}{\partial y}\\ \frac{\partial v}{\partial x}+\frac{\partial u}{\partial y}\\ \end{matrix} \right\}\tag{3} {ε}=⎩⎨⎧εxεyγxy⎭⎬⎫=⎩⎨⎧∂x∂u∂y∂v∂x∂v+∂y∂u⎭⎬⎫(3) 将(1)式带入(3)式可得: { ε } = [ ∂ ∂ x 0 0 ∂ ∂ y ∂ ∂ y ∂ ∂ x ] ∗ [ N 1 N 2 N 3 N 4 . . . ] ∗ [ u 1 v 1 u 2 v 2 u 3 v 3 u 4 v 4 . . . . . . ] \left\{\begin{matrix} ε \end{matrix} \right\}= \left[ \begin{matrix} \frac{\partial }{\partial x};0\\ 0;\frac{\partial }{\partial y}\\ \frac{\partial }{\partial y};\frac{\partial }{\partial x} \end{matrix} \right]* \left[\begin{matrix} N_{1};N_{2};N_{3};N_{4};... \end{matrix} \right]* \left[\begin{matrix} u_{1};v_{1}\\ u_{2};v_{2}\\ u_{3};v_{3}\\ u_{4};v_{4}\\ ...;...\\ \end{matrix} \right] {ε}=⎣⎡∂x∂0∂y∂0∂y∂∂x∂⎦⎤∗[N1N2N3N4...]∗⎣⎢⎢⎢⎢⎡u1u2u3u4...v1v2v3v4...⎦⎥⎥⎥⎥⎤ 求上式 ∂ N i ∂ x , ∂ N i ∂ y \frac{\partial N_{i}}{\partial x},\frac{\partial N_{i}}{\partial y} ∂x∂Ni,∂y∂Ni,由复合函数求导可得: (4) ∂ N i ∂ ξ = ∂ N i ∂ x ∂ x ∂ ξ + ∂ N i ∂ y ∂ y ∂ ξ ∂ N i ∂ η = ∂ N i ∂ x ∂ x ∂ η + ∂ N i ∂ y ∂ y ∂ η \frac{\partial N_{i}}{\partial ξ}=\frac{\partial N_{i}}{\partial x}\frac{\partial x}{\partial ξ}+\frac{\partial N_{i}}{\partial y}\frac{\partial y}{\partial ξ}\newline \newline\frac{\partial N_{i}}{\partial η}=\frac{\partial N_{i}}{\partial x}\frac{\partial x}{\partial η}+\frac{\partial N_{i}}{\partial y}\frac{\partial y}{\partial η}\tag{4} ∂ξ∂Ni=∂x∂Ni∂ξ∂x+∂y∂Ni∂ξ∂y∂η∂Ni=∂x∂Ni∂η∂x+∂y∂Ni∂η∂y(4) 即: { ∂ N i ∂ ξ ∂ N i ∂ η } = [ J ] { ∂ N i ∂ x ∂ N i ∂ y } \left\{\begin{matrix} \frac{\partial N_{i}}{\partial ξ}\\ \frac{\partial N_{i}}{\partial η} \end{matrix} \right\}=[J] \left\{\begin{matrix} \frac{\partial N_{i}}{\partial x}\\ \frac{\partial N_{i}}{\partial y} \end{matrix} \right\} {∂ξ∂Ni∂η∂Ni}=[J]{∂x∂Ni∂y∂Ni} 其中矩阵[J]为雅可比矩阵 [ J ] = [ ∂ x ∂ ξ ∂ y ∂ ξ ∂ x ∂ η ∂ y ∂ η ] = [ ∑ ∂ N i ∂ ξ x i ∑ ∂ N i ∂ ξ y i ∑ ∂ N i ∂ η x i ∑ ∂ N i ∂ η y i ] = { ∂ N 1 ∂ ξ ∂ N 2 ∂ ξ ∂ N 3 ∂ ξ ∂ N 4 ∂ ξ ∂ N 1 ∂ η ∂ N 2 ∂ η ∂ N 3 ∂ η ∂ N 4 ∂ η } ∗ { x 1 y 1 x 2 y 2 x 3 y 3 x 4 y 4 } \left[\begin{matrix} J \end{matrix} \right]= \left[\begin{matrix} \frac{\partial x}{\partial ξ};\frac{\partial y}{\partial ξ}\\ \frac{\partial x}{\partial η};\frac{\partial y}{\partial η}\\ \end{matrix} \right]=\left[\begin{matrix} \sum\frac{\partial N_{i}}{\partial ξ}x_{i};\sum\frac{\partial N_{i}}{\partial ξ}y_{i}\\ \sum\frac{\partial N_{i}}{\partial η}x_{i};\sum\frac{\partial N_{i}}{\partial η}y_{i}\\ \end{matrix} \right]= \left\{\begin{matrix} \frac{\partial N_{1}}{\partial ξ};\frac{\partial N_{2}}{\partial ξ};\frac{\partial N_{3}}{\partial ξ};\frac{\partial N_{4}}{\partial ξ}\\ \frac{\partial N_{1}}{\partial η};\frac{\partial N_{2}}{\partial η};\frac{\partial N_{3}}{\partial η};\frac{\partial N_{4}}{\partial η}\\ \end{matrix} \right\}*\left\{\begin{matrix} x_{1};y_{1}\\ x_{2};y_{2}\\ x_{3};y_{3}\\ x_{4};y_{4}\\ \end{matrix} \right\} [J]=[∂ξ∂x∂η∂x∂ξ∂y∂η∂y]=[∑∂ξ∂Nixi∑∂η∂Nixi∑∂ξ∂Niyi∑∂η∂Niyi]={∂ξ∂N1∂η∂N1∂ξ∂N2∂η∂N2∂ξ∂N3∂η∂N3∂ξ∂N4∂η∂N4}∗⎩⎪⎪⎨⎪⎪⎧x1x2x3x4y1y2y3y4⎭⎪⎪⎬⎪⎪⎫ 因此: { ∂ N i ∂ x ∂ N i ∂ y } = [ J ] − 1 ∗ { ∂ N i ∂ ξ ∂ N i ∂ η } \left\{\begin{matrix} \frac{\partial N_{i}}{\partial x}\\ \frac{\partial N_{i}}{\partial y} \end{matrix} \right\}=[J]^{-1}*\left\{\begin{matrix} \frac{\partial N_{i}}{\partial ξ}\\ \frac{\partial N_{i}}{\partial η} \end{matrix} \right\} {∂x∂Ni∂y∂Ni}=[J]−1∗{∂ξ∂Ni∂η∂Ni} 雅可比矩阵实现(JuliaFEM)在JuliaFEM的FEMBasis包中math.jl中实现了雅可比矩阵的计算,函数需要三个参数分别为: 单元类型整体坐标系下节点的坐标值,即上述 ( x i , y i ) (x_{i},y_{i}) (xi,yi)待求点的局部坐标系下的坐标值首先需要计算 ∂ N i ∂ ξ , ∂ N i ∂ η \frac{\partial N_{i}}{\partial ξ},\frac{\partial N_{i}}{\partial η} ∂ξ∂Ni,∂η∂Ni,需要用到eval_dbasis(B, xi)函数,B为单元类型,xi为待求点的局部坐标系下的坐标值。详见有限元形函数及JuliaFEM中的实现方式。 ''' jacobian(B, X, xi) Given basis B, calculate jacobian at xi. # Example #单元类型 B = Quad4() #整体坐标系下的节点坐标 X = ([0.0, 0.0], [1.0, 0.0], [1.0, 1.0], [0.0, 1.0]) #(0.0, 0.0)为待求点的局部坐标系下的坐标 jacobian(B, X, (0.0, 0.0)) # output 2×2 Array{Float64,2}: 0.5 0.0 0.0 0.5 ''' function jacobian(B, X, xi) #dB求dN/dξ,dN/dη dB = eval_dbasis(B, xi) dim1, nbasis = size(B) dim2 = length(first(X)) J = zeros(dim1, dim2) for i=1:dim1 for j=1:dim2 for k=1:nbasis #分项相乘后累加 J[i,j] += dB[i,k]*X[k][j] end end end return J endgrad函数是对 { ∂ N i ∂ x ∂ N i ∂ y } \left\{\begin{matrix} \frac{\partial N_{i}}{\partial x}\\ \frac{\partial N_{i}}{\partial y} \end{matrix} \right\} {∂x∂Ni∂y∂Ni}的求解, ''' grad(B, X, xi) Given basis B, calculate gradient dN/dX at xi. # Example B = Quad4() X = ([0.0, 0.0], [1.0, 0.0], [1.0, 1.0], [0.0, 1.0]) grad(B, X, (0.0, 0.0)) # output 2×4 Array{Float64,2}: -0.5 0.5 0.5 -0.5 -0.5 -0.5 0.5 0.5 ''' function grad(B, X, xi) J = jacobian(B, X, xi) dB = eval_dbasis(B, xi) G = inv(J) * dB return G end由(4)式可知, { ε } = { ∂ u ∂ x ∂ v ∂ y ∂ v ∂ x + ∂ u ∂ y } \left\{\begin{matrix} ε \end{matrix} \right\}=\left\{\begin{matrix} \frac{\partial u}{\partial x}\\ \frac{\partial v}{\partial y}\\ \frac{\partial v}{\partial x}+\frac{\partial u}{\partial y}\\ \end{matrix} \right\} {ε}=⎩⎨⎧∂x∂u∂y∂v∂x∂v+∂y∂u⎭⎬⎫ u,v为各节点的整体坐标系的位移,在math.jl中另一个grad(B, T, X, xi)函数即用于求解上式的应变,此处的T为单元各节点的整体坐标系下的位移向量。求得的结果为: [ ∑ ∂ N i ∂ x u i ∑ ∂ N i ∂ x v i ∑ ∂ N i ∂ y u i ∑ ∂ N i ∂ y v i ] = [ ∂ u ∂ x ∂ v ∂ x ∂ u ∂ y ∂ v ∂ y ] \left[ \begin{matrix} \sum\frac{\partial N_{i}}{\partial x}u_{i};\sum\frac{\partial N_{i}}{\partial x}v_{i}\\ \sum\frac{\partial N_{i}}{\partial y}u_{i};\sum\frac{\partial N_{i}}{\partial y}v_{i}\\ \end{matrix} \right]= \left[ \begin{matrix} \frac{\partial u}{\partial x};\frac{\partial v}{\partial x}\\ \frac{\partial u}{\partial y};\frac{\partial v}{\partial y}\\ \end{matrix} \right] [∑∂x∂Niui∑∂y∂Niui∑∂x∂Nivi∑∂y∂Nivi]=[∂x∂u∂y∂u∂x∂v∂y∂v] grad(B, T, X, xi) Calculate gradient of `T` with respect to `X` in point `xi` using basis `B`. # Example B = Quad4() X = ([0.0, 0.0], [1.0, 0.0], [1.0, 1.0], [0.0, 1.0]) u = ([0.0, 0.0], [1.0, -1.0], [2.0, 3.0], [0.0, 0.0]) grad(B, u, X, (0.0, 0.0)) # output 2×2 Array{Float64,2}: 1.5 0.5 1.0 2.0 """ function grad(B, T, X, xi) #B的行函数的梯度 G = grad(B, X, xi) nbasis = length(B) #与[T]的内积 dTdX = sum(kron(G[:,i], T[i]') for i=1:nbasis) return dTdX' end |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |